Universal OS 1.01 pour TI 89 et TI92 Plus
Copyright (C) 2000. Tous droits rservs.

Pour tester Universal OS 1.00, j'avais l'mulateur avec toutes les
versions de ROM et deux calculatrices : une HW1 1.01 et une HW2 1.05.
a marchait sans problme et j'en avais dduit qu'il fonctionnait sur
HW2 2.03. Malheureusement, ce n'est pas le cas : il y a bien une barre
noire.
Je corrige donc ma doc en prcisant que Universal OS 1.0x fonctionne
sur : - toutes les HW1
      - HW2  condition de mettre la ROM 1.05

I) Introduction

Universal OS est un noyau 'entirement' (cf 'Particularits')
compatible avec DoorsOS II 0.92. Vous pouvez archiver n'importe quelle
librairie et excuter des programmes de plus de 8 kb directement, mme
sur les ROM 2.xx. Le niveau de gris fonctionne sur HW1 et HW2 
condition que le programme utilise graphlib, gray4lib ou gray7lib
(essayez Super Mario Quest 1.0.3)

Universal OS n'est pas termin : il reste encore quelques limitations
mais une nouvelle version devrait sortir rapidement.

Contenu :
- install : pour installer et dsinstaller
- kernel : le noyau (non ncessaire  la dsinstallation)
- phoenix : le jeu phoenix non bugg (cf 'Problmes connus')

Universal OS est un 'freeware'. Sa distribution est encourage, tant que
les fichiers restent ensembles et non modififis depuis le moment o ils
ont t initialement distribus.

II) Installation et utilisation

Lancez install. Vous pouvez maintenant utiliser n'importe quel programme
en assembleur. Seul ce programme install peut dsinstaller correctement
ce kernel.

NOTES :	- kernel doit tre dsarchiv and dans le mme rpertoire que
	  install
	- Vous pouvez quitter le programme assembleur en cours 
	  n'importe quel moment ( moins que le programme en question
	  ne l'en empche), en appuyant sur ESC+ON.
	- Utilisez ce programme  vos risques. Je ne peux tre jug
	  responsable des dommages qui pourraient se produire.
	- N'INSTALLEZ PAS DoorsOS aprs avoir install Universal OS (
	  moins que vous l'avez dsinstall depuis).
	- NE DESINSTALLEZ PAS Universal OS avec le programme de
	  dsinstallation livr avec DoorsOS ou un autre kernel.
        - Universal OS ne remplace pas automatiquement un ancien kernel,
	  ceci pour des raisons de scurit (comment puis-je savoir
	  comment dsinstaller un kernel ! Chacun a sa propre faon de
	  s'installer, Universal OS y compris)

III) Particularits

- Shift-ON ne fait rien : utilsez un programme de type kbdprgm.
- Les librairies doivent tre dans le rpertoire main.
- Universal OS ne rcupre pas la mmoire laisse alloue par un
  programme : personnellement, je ne vois pas comment on peut savoir si
  un bloc mmoire est perdu ou est important. D'ailleurs, l'algorithme
  employ par DoorsOS est imparfait.
- les fonctions (un)reloc(2) ne sont pas supportes : par exemple,
  prosit ne fonctionnera pas. (Je pense que c'est le seul)
- la fonction userlib::exec ne supporte le programmes zipps : c'est la
  seule diffrence avec les libraries de DoorsOS II 0.92.

- Vous pouvez teindre la calculatrice  n'importe quel moment  l'aide
  de 2nd+ON.
- util, userlib, gray4lib, gray7lib (sauf sur HW2), graphlib and linelib
  ont t reprogrammes and intgres  Universal OS.

IV) Notes aux programmeurs

Ces remarques concernent aussi les programmeurs qui utilisent DoorsOS.

* le point de sortie _exit :

Imaginez ce cas : une librairie A utilise, dans sa section _exit, une
librairie B et de mme, B utilise A dans sa section _exit. Si A ou B
a besoin d'une information qu'elle a supprim auparavant alors il y a un
bogue, aussi sophistique la protection Anti Crash puisse tre.
Donc n'utilisez pas de librairies  cet endroit.

* Compatibilit

Pour qu'il n'y ait plus de problmes lis  de nouvelles versions de
ROM, vitez les constantes et prfrez les RAM_CALL et les librairies,
PUIS les ROM_CALL.
En effet, TI a chang quelques ROM_CALL avec la ROM 2.xx : par exemple,
_ROM_CALL_15C ne pointe plus sur la routine EM_blockErase mais sur une
variable en rapport avec le clavier (J'espre que c'est le seul
changement).
N'utilisez pas LCD_MEM si le programme est en niveau de gris ! Il existe
des variables et des fonctions adaptes.

Faites en sorte que vos programmes soient compatibles  la fois sur la
TI 89 et la TI92 Plus. Ceci concerne surtout le clavier.

* le fichier d'en-tte DoorsOS.h :

Il y a une erreur dans DoorsOS.h :
GETKEY_CODE	equ	doorsos::MaxHandles+$1e
doit tre remplac par :
GETKEY_CODE	equ	doorsos::kb_globals+$1e

N'utilisez pas :
- doorsos::EM_blockErase	equ	_ROM_CALL_15c
- APD_INIT	equ	LCD_MEM+$F10
  APD_TIMER	equ	LCD_MEM+$F14
  APD_FLAG	equ	LCD_MEM+$F42
  mais les fonctions userlib::get_APD et userlib::get_ADP.
- doorsos::ER_throw macro
   dc.w $A000+\1
   endm
  par scurit, mme si j'ai amlior la protection Anti Crash pour que
  le programme quitte le plus proprement possible.

* les appels  la ROM  :

Considrez que toutes les fonctions de tios dtruisent D0-D2/A0-A1 :
ceci explique pourquoi Falldown and Tetris ne sauvegardent pas les noms
sur les ROM 2.xx. Donc faites attention avec les macros WriteStr et
WriteStrA.

* dsinstallation de Universal OS

$48.w : handle du bloc mmoire contenant le noyau
MAIS NE LE LIBEREZ PAS pour dsinstaller Universal OS car il change des
vecteurs.
UTILISEZ install.

VI) Problmes connus

Universal OS utilise la pile superviseur pour y sauver des informations
importantes. Mais certains programmes boggus crivent  cet endroit :
avec d'autres noyaux, ce genre de bogue est invisible puisqu'ils n'y
sauvent rien, mais avec Universal OS, la calculatrice peut se planter.

exemples : - quelquefois, db92 gre mal le ssp : il quitte avec un ssp
             plus grand le ssp initial. La calculatrice ne devrait pas
             se planter.
           - quand phoenix 89 efface l'cran, il dborde sur la pile
             superviseur. La calculatrice se plante aprs avoir quitt
             tous les programmes : toutes les piles doivent tre
             retires pendant un moment avant de pouvoir rinitialiser.

Parce que Universal OS ne rcupre pas la mmoire perdu par un
programme, vous ne devriez pas utiliser as92 pour le moment.

Pour amliorer la protection Anti Crash, Universal OS fait une copie de
tout programme sauf s'il s'agit d'un programme archiv car tios et les
fonctions util::exec et userlib::exec en font une.
Cependant, la mthode employe pour savoir si tios en a fait une ne
fonctionne pas sur les ROM 2.xx : dans ce cas, Universal OS devrait
toujours en faire une, parfois inutilement.

VI) Prochaines versions

- une version pour 2.03 : j'ai quelques ides.
- librairies dans n'importe quel rpertoire
- supporte les fonctions reloc
- trouver un meilleur moyen de dtecter s'il s'agit d'une copie d'un
  programme archiv
- empcher les fonctions graphiques d'crire en dehors du plan
  selectionn si les coordonnes sont mauvaises et reporter le bug par
  un message.
- finir la fonction userlib::exec pour qu'elle puisse excuter des
  programmes zipps.

VII) Historique

03/12/2000:
- Sortie de Universal OS 1.01.
- Correction de quelques bogues au niveau de :
  - doorsos::kb_globals (_RAM_CALL_010)
  - util::clr_scr
  - userlib::lockcalc
  - checksum de Phoenix

02/12/2000:
- Sortie de Universal OS 1.00.

VIII) Comment me contacter

e-mail : <Julien.Muchembled@netcourrier.com>

Reportez tous les bogues que vous trouvez, sans oublier de donner une
description prcise du problme.